home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / mus / edit / WaveTracer.lha / WaveTracer / Doc / Developer / Sources / Mac_PC_RAW8.Loader.p < prev    next >
Text File  |  1996-06-01  |  6KB  |  136 lines

  1. program LOADER;
  2.  
  3. { © by QXC & VWP! All Rights Reserved! Siehe "Programmierung.Guide" und
  4.   "Grammophon.eff.p" für ausführliche Copyright-Infos }
  5.  
  6. Uses ExecIO;
  7.  
  8. type Image=ptr;
  9. type Window=ptr;
  10. type Screen=ptr;
  11. type IntuiText=ptr;
  12.  
  13. {$incl "libraries/dos.h","exec/memory.h"};
  14. {$path "WaveTracer/","RAM:include/";incl "WTIncl.mod","ModIncl.mod"}
  15.  
  16. { WTIncl.mod  - Alle wichtigen Strukturen und Konstanten
  17.   ModIncl.mod - Alle für das Modulehandling wichtigen Proceduren, Strukturen
  18.                 und Variablendefinitionen }
  19.  
  20. var Addr1,Addr8,l,m                             :long;
  21. var Data8                                       :^byte;
  22. var Data1                                       :^long;
  23. var i                                           :integer;
  24. var MemLS                                       :long;
  25. var ChCnt                                       :byte;
  26.  
  27.  
  28.  
  29. procedure CHECKSIZE;
  30.  
  31. begin
  32.    with MyWTStdMsg^ do begin
  33.       l:=DosSeek(ActFHandle,0,OFFSET_END);
  34.       MemLS:=DosSeek(ActFHandle,0,OFFSET_BEGINNING);
  35.       Flags:=0;
  36.       WTMsgPrc^:=MsgPrc(WTM_CHANNELREQ,'Welche Kanäle enthält das RAW-Sample?',
  37.                         '','','','',$3F,ActiveChannels,0,0,0,NIL);
  38.       MESSAGEHANDLE;
  39.                                          { WaveTracer interne Funktion für einen
  40.                                            Kanal-Requester, das Ergebnis steht bei
  41.                                            Erfolg in PRC_Long1 }
  42.       if WTMsgPrc^.PRC_Long1=-1 then ActiveChannels:=1 else ActiveChannels:=WTMsgPrc^.PRC_Long1;
  43.       ChCnt:=0;
  44.       l:=1;   for i:=1 to 6 do begin
  45.          if not (ActiveChannels and l=0) then ChCnt:=ChCnt+1;
  46.       l:=l*2; end;
  47.       if ActiveChannels in [CH_CENTER,CH_LEFT,CH_RIGHT] then ActiveMode:=MD_MONO
  48.       else if ActiveChannels<=CH_LEFT+CH_RIGHT then ActiveMode:=MD_STEREO
  49.       else if ActiveChannels<=CH_LEFT+CH_RIGHT+CH_CENTER then ActiveMode:=MD_3CH;
  50.       if not (ActiveChannels and CH_SLEFT=0) then ActiveMode:=MD_SURROUND;
  51.       if not (ActiveChannels and CH_SRIGHT=0) then ActiveMode:=MD_AC3_SUB;
  52.       if not (ActiveChannels and CH_SUB=0) then Activemode:=MD_AC3;
  53.       MemLS:=MemLS div ChCnt;
  54.                                          { Anhand der vom User angegebenen
  55.                                            Kanäle feststellen, welcher Sound-
  56.                                            mode vorliegt }
  57.       Flags:=MDE_READY;
  58.    end;
  59. end;
  60.  
  61.  
  62.  
  63. procedure LOADRAW;
  64.  
  65. begin
  66.    with MyWTstdMsg^ do begin
  67.       m:=1;
  68.       for i:=1 to 6 do begin
  69.          if not (ActiveChannels and m=0) and (MemA24[i]<>0) then begin
  70.             l:=DosRead(ActFHandle,ptr(MemA24[i]+MemL24-MemLS),MemLS);
  71.             if l<MemLS then begin
  72.                Flags:=0;
  73.                WTMsgPrc^:=MsgPrc(WTM_TASKREQ,'Kann Daten nicht laden!','Operation abgebrochen!',
  74.                                  '','OK','',0,0,0,0,0,NIL);
  75.                MESSAGEHANDLE;            { Fehler aufgetreten: Fehlermeldung ab-
  76.                                            geben und mit MDE_ERROR beenden }
  77.                Flags:=MDE_ERROR;
  78.                exit;
  79.             end;
  80.             Addr1:=MemA24[i];
  81.             Addr8:=MemA24[i]+MemL24-MemLS;
  82.             repeat
  83.                Data8:=ptr(Addr8); Addr8:=Addr8+1;
  84.                Data1:=ptr(Addr1); Addr1:=Addr1+4;
  85.                Data1^:=(Data8^-127)*65535;
  86.             until Addr8>=MemA24[i]+MemL24;
  87.             PlayL24:=Addr1-MemA24[i];    { Geladene 8Bit-Daten werden in das
  88.                                            24Bit Longword-Format des
  89.                                            WaveTracer umgewandelt }
  90.          end;
  91.          m:=m*2;
  92.       end;
  93.       Flags:=MDE_READY;
  94.    end;
  95. end;
  96.  
  97.  
  98. begin
  99.    OpenLib(DosBase,'dos.library',0);
  100.    if CREATEPORTS(PORT_LOADER) then begin  { Eigenen Port anlegen }
  101.       with MyWTStdMsg^ do if Version=VERSION_LOADER then begin
  102.          if Flags=MDC_ASKREADY then begin  { Lademodul wurde neu selektiert }
  103.             Flags:=0;
  104.             WTMsgPrc^:=MsgPrc(WTM_TASKREQ,'8 Bit AC3 PC-/MacIntosh®-RAW Lademodul',
  105.                               COPYRIGHT,'','OK','',0,0,0,0,0,NIL);
  106.             MESSAGEHANDLE;                 { Copyright-Info ausgeben }
  107.             Flags:=MDE_READY;
  108.          end else if ActFHandle<>0 then begin
  109.             { FileHandle auf die bereits geöffnete Datei findet sich in
  110.               MyWTStdMsg^.ActFHandle; sie darf nicht mit DosClose geschlossen
  111.               werden, das erledigt der WaveTracer }
  112.             if Flags=MDC_DEFINEIT then begin
  113.                                            { Sample wurde selektiert: der
  114.                                              WaveTracer erwartet jetzt die An-
  115.                                              gaben über Länge, Kanäle und Sound-
  116.                                              mode }
  117.                CHECKSIZE;
  118.                ActWaveOp^.Operator[1]:=MemLS;
  119.             end else if Flags=MDC_DOIT then begin
  120.                                            { Funktionsgenerator wurde mit "OK" ver-
  121.                                              lassen, das Sample soll mit den ange-
  122.                                              gebenen Werten für Länge, Kanälke und
  123.                                              Soundmode geladen werden }
  124.                MemLS:=ActWaveOp^.Operator[1];
  125.                LOADRAW;
  126.             end;
  127.          end else Flags:=MDE_ERROR;        { Unbekanntes Kommando vom WaveTracer }
  128.       end else Flags:=MDE_WRONG_MODULEVERSION;
  129.                                            { Unbekannte Schnittstellen-Version }
  130.       MESSAGEHANDLE;
  131.       RemPort(MyPort);                     { Erfolgs-Flag (MDE_...) absenden
  132.                                              und eigenen Port entfernen }
  133.    end;
  134.    CloseLib(DosBase);
  135. end.
  136.